﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ProjetoControlePagamento.Dados.Entidades;
using ProjetoControlePagamento.Dados.Enumeradores;
using ProjetoControlePagamento.Servicos;

namespace ProjetoControlePagamento.Visoes.Telas.Administradores
{
    public partial class ADMGCadastroEmpresas : System.Web.UI.Page
    {
        private static bool _isUpdate;
        private static Empresa _empresatmp;
        private static Empresa _empresaUpdate;

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                MontarGridView();

                ControleEstado(EstadoTela.NAVEGANDO);
            }
        }

        private void MontarGridView()
        {
            if (!Page.IsPostBack)
            {
                grdEmpresas.AutoGenerateColumns = false;

                BoundField colunaCod = new BoundField();
                colunaCod.DataField = "EmpresaId";
                colunaCod.HeaderText = "Código";
                colunaCod.ItemStyle.Width = 100;
                grdEmpresas.Columns.Add(colunaCod);

                BoundField colunaNome = new BoundField();
                colunaNome.DataField = "RazaoSocial";
                colunaNome.HeaderText = "Nome da Empresa";
                colunaNome.ItemStyle.HorizontalAlign = HorizontalAlign.Left;
                colunaNome.ItemStyle.Width = 450;
                grdEmpresas.Columns.Add(colunaNome);

                BoundField colunaCidade = new BoundField();
                colunaCidade.DataField = "Cidade";
                colunaCidade.HeaderText = "Cidade";
                colunaCidade.ItemStyle.HorizontalAlign = HorizontalAlign.Left;
                colunaCidade.ItemStyle.Width = 200;
                grdEmpresas.Columns.Add(colunaCidade);

                BoundField colunaTelefone = new BoundField();
                colunaTelefone.DataField = "Telefone";
                colunaTelefone.HeaderText = "Telefone";
                colunaTelefone.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
                colunaTelefone.ItemStyle.Width = 100;
                grdEmpresas.Columns.Add(colunaTelefone);
            }

            grdEmpresas.DataSource = Fachada.GetInstancia().ObterTodasEmpresas();
            grdEmpresas.DataBind();
        }

        protected void LinkButton1_Click(object sender, EventArgs e)
        {
            _isUpdate = false;

            ControleEstado(EstadoTela.INSERINDO);
        }

        protected void LinkButton2_Click(object sender, EventArgs e)
        {
            if (_empresaUpdate != null)
            {
                _isUpdate = true;

                ControleEstado(EstadoTela.ALTERANDO);
            }
            else
            {
                Alert.Show("Selecione uma Empresa!");
            }
        }

        protected void LinkButton3_Click(object sender, EventArgs e)
        {
            if (Validar())
            {
                MontarEmpresa();
                Salvar(_empresatmp);
            }
        }

        private void MontarEmpresa()
        {
            _empresatmp = new Empresa();

            if (_isUpdate)
            {
                _empresatmp.EmpresaId = _empresaUpdate.EmpresaId;
            }

            _empresatmp.Cep = txtCep.Text;
            _empresatmp.Cidade = txtCidade.Text;
            _empresatmp.Telefone = txtTelefone.Text;
            _empresatmp.DataContrato = DateTime.Parse(txtData.Text);
            _empresatmp.Email = txtEmail.Text;
            _empresatmp.Endereco = txtEndereco.Text;
            _empresatmp.Estado = ddlEstado.Text;
            _empresatmp.RazaoSocial = txtRazaoSocial.Text;
       
        }

        private void Salvar(Empresa empresa)
        {
            if (_isUpdate)
            {
                Fachada.GetInstancia().Atualizar(empresa);
            }
            else
            {
                Fachada.GetInstancia().Inserir(empresa);
            }

            MontarGridView();
            ControleEstado(EstadoTela.NAVEGANDO);
        }

        private bool Validar()
        {
            bool validado =true;

            if (String.IsNullOrEmpty(txtRazaoSocial.Text))
            {
                validado = false;
                lblRazaoSocial.Visible = true;
            }
            else
            {
                lblRazaoSocial.Visible = false;
            }

            if (String.IsNullOrEmpty(txtCidade.Text))
            {
                validado = false;
                lblCidade.Visible = true;
            }
            else
            {
                lblCidade.Visible = false;
            }

            if (String.IsNullOrEmpty(txtEmail.Text))
            {
                validado = false;
                lblEmail.Visible = true;
            }
            else
            {
                lblEmail.Visible = false;
            }

            if (ddlEstado.SelectedIndex == 0)
            {
                validado = false;
                lblEstado.Visible = true;
            }
            else
            {
                lblEstado.Visible = false;
            }

            if (String.IsNullOrEmpty(txtData.Text))
            {
                validado = false;
                lblDataContrato.Visible = true;
            }
            else
            {
                lblDataContrato.Visible = false;
            }

            return validado;
        }

        private void ControleEstado(EstadoTela estadoTela)
        {
            switch (estadoTela)
            {
                case EstadoTela.ALTERANDO:
                {
                    txtCep.Enabled = true;
                    txtCidade.Enabled = true;
                    txtData.Enabled = true;
                    txtEmail.Enabled = true;
                    txtEndereco.Enabled = true;
                    txtRazaoSocial.Enabled = true;
                    txtTelefone.Enabled = true;
                    ddlEstado.Enabled = true;

                    lnkSalvar.Enabled = true;
                    lnkAlterar.Enabled = false;
                    lnkNovo.Enabled = false;
                    lnkExcluir.Enabled = false;
                    lnkCancelar.Enabled = true;

                    grdEmpresas.Enabled = false;

                    break;
                }

                case EstadoTela.EXCLUIDO:
                {
                    txtCep.Enabled = false;
                    txtCidade.Enabled = false;
                    txtData.Enabled = false;
                    txtEmail.Enabled = false;
                    txtEndereco.Enabled = false;
                    txtRazaoSocial.Enabled = false;
                    txtTelefone.Enabled = false;
                    ddlEstado.Enabled = false;

                    txtCep.Text = "";
                    txtCidade.Text = "";
                    txtData.Text = "";
                    txtEmail.Text = "";
                    txtEndereco.Text = "";
                    txtRazaoSocial.Text = "";
                    txtTelefone.Text = "";
                    ddlEstado.SelectedIndex = 0;

                    lnkSalvar.Enabled = false;
                    lnkAlterar.Enabled = true;
                    lnkNovo.Enabled = true;
                    lnkExcluir.Enabled = true;
                    lnkCancelar.Enabled = true;

                    grdEmpresas.Enabled = true;

                    break;
                }

                case EstadoTela.INSERINDO:
                {

                    txtCep.Enabled = true;
                    txtCidade.Enabled = true;
                    txtData.Enabled = true;
                    txtEmail.Enabled = true;
                    txtEndereco.Enabled = true;
                    txtRazaoSocial.Enabled = true;
                    txtTelefone.Enabled = true;
                    ddlEstado.Enabled = true;

                    txtCep.Text = "";
                    txtCidade.Text = "";
                    txtData.Text = "";
                    txtEmail.Text = "";
                    txtEndereco.Text = "";
                    txtRazaoSocial.Text = "";
                    txtTelefone.Text = "";
                    ddlEstado.SelectedIndex = 0;

                    lnkSalvar.Enabled = true;
                    lnkAlterar.Enabled = false;
                    lnkNovo.Enabled = false;
                    lnkExcluir.Enabled = false;
                    lnkCancelar.Enabled = true;

                    grdEmpresas.Enabled = false;

                    break;
                }

                case EstadoTela.NAVEGANDO:
                {
                    txtCep.Enabled = false;
                    txtCidade.Enabled = false;
                    txtData.Enabled = false;
                    txtEmail.Enabled = false;
                    txtEndereco.Enabled = false;
                    txtRazaoSocial.Enabled = false;
                    txtTelefone.Enabled = false;
                    ddlEstado.Enabled = false;

                    txtCep.Text = "";
                    txtCidade.Text = "";
                    txtData.Text = "";
                    txtEmail.Text = "";
                    txtEndereco.Text = "";
                    txtRazaoSocial.Text = "";
                    txtTelefone.Text = "";
                    ddlEstado.SelectedIndex = 0;

                    lblRazaoSocial.Visible = false;
                    lblEstado.Visible = false;
                    lblEmail.Visible = false;
                    lblDataContrato.Visible = false;
                    lblCidade.Visible = false;


                    lnkSalvar.Enabled = false;
                    lnkAlterar.Enabled = true;
                    lnkNovo.Enabled = true;
                    lnkExcluir.Enabled = true;
                    lnkCancelar.Enabled = true;

                    grdEmpresas.Enabled = true;

                    grdEmpresas.SelectedIndex = -1;

                    break;
                }
            }
        }

        protected void lnkCancelar_Click(object sender, EventArgs e)
        {
            _empresaUpdate = null;

            ControleEstado(EstadoTela.NAVEGANDO);
        }

        protected void grdEmpresas_SelectedIndexChanged(object sender, EventArgs e)
        {
            GridViewRow viewRow = grdEmpresas.SelectedRow;
            
            _empresaUpdate = Fachada.GetInstancia().ObterEmpresaPorId(int.Parse(viewRow.Cells[1].Text));

            CarregarDados();
        }

        private void CarregarDados()
        {
            txtCep.Text = _empresaUpdate.Cep;
            txtCidade.Text = _empresaUpdate.Cidade;
            txtData.Text = _empresaUpdate.DataContrato.ToShortDateString();
            txtEmail.Text = _empresaUpdate.Email;
            txtEndereco.Text = _empresaUpdate.Endereco;
            txtRazaoSocial.Text = _empresaUpdate.RazaoSocial;
            txtTelefone.Text = _empresaUpdate.Telefone;
            ddlEstado.Text = _empresaUpdate.Estado;
        }

        protected void lnkExcluir_Click(object sender, EventArgs e)
        {
            GridViewRow viewRow = grdEmpresas.SelectedRow;

            if (viewRow != null)
            {
                Fachada.GetInstancia().ExcluirEmpresa(int.Parse(viewRow.Cells[1].Text));

                MontarGridView();

                ControleEstado(EstadoTela.NAVEGANDO);
            }
            else
            {
                Alert.Show("Selecione uma Empresa!");
            }
           
        }

        protected void grdEmpresas_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            grdEmpresas.PageIndex = e.NewPageIndex;
            MontarGridView();
            
        }
    }
}